Imports System.Data.SqlClient
Imports System.ComponentModel

Public Class cls_seguimiento_

    Implements ICloneable

#Region "Variables ..."
    Private int_idseguimiento As Integer = 0
    Private dte_fecha As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private dte_hora As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private int_idusuario As Integer = 0
    Private str_usuarioSTR As String = ""
    Private int_idcliente As Integer = 0
    Private str_clienteSTR As String = ""
    Private str_sistema As String = ""
    Private str_menu1 As String = ""
    Private str_menu2 As String = ""
    Private str_referencia As String = ""
    Private str_texto As String = ""
    Private int_estado As enu_estado = 0
    Private dte_estadofecha As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private bit_finalizado As Boolean = False
    Private int_importancia As enu_importancia = 0
    Private int_orden As Integer = 0
    Private str_adjunto As Byte()
    Private int_PRGhoras As Integer = 0
    Private dbl_PRGvalorhora As Double = 0
    Private dbl_PRGimporte As Double = 0
    Private bit_pagado As Boolean = False
    Private dte_pagadofecha As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private str_adjuntoNombre As String = ""
    Private dte_finalizadofecha As DateTime
    Private dte_vencimiento As DateTime
    Private dte_vencimientoRe As DateTime

    Private col_Items As Collections.Generic.List(Of cls_seguimiento_) = Nothing

    Public Enum enu_estado
        <Description("Pendiente.")> pendiente = 0
        <Description("Revisado.")> revisado = 1
    End Enum

    Public Enum enu_importancia
        <Description("Baja.")> baja = 0
        <Description("Normal")> normal = 1
        <Description("Media")> media = 2
        <Description("Alta")> alta = 3
    End Enum
#End Region

#Region "Propiedades ..."
    Property idseguimiento() As Integer
        Get
            idseguimiento = int_idseguimiento
        End Get
        Set(ByVal value As Integer)
            int_idseguimiento = value
        End Set
    End Property
    Property fecha() As DateTime
        Get
            fecha = dte_fecha
        End Get
        Set(ByVal value As DateTime)
            dte_fecha = value
        End Set
    End Property
    Property hora() As DateTime
        Get
            hora = dte_hora
        End Get
        Set(ByVal value As DateTime)
            dte_hora = value
        End Set
    End Property
    Property idusuario() As Integer
        Get
            idusuario = int_idusuario
        End Get
        Set(ByVal value As Integer)
            int_idusuario = value
        End Set
    End Property
    Property usuarioSTR() As String
        Get
            usuarioSTR = str_usuarioSTR
        End Get
        Set(ByVal value As String)
            str_usuarioSTR = value
        End Set
    End Property
    Property idcliente() As Integer
        Get
            idcliente = int_idcliente
        End Get
        Set(ByVal value As Integer)
            int_idcliente = value
        End Set
    End Property
    Property clienteSTR() As String
        Get
            clienteSTR = str_clienteSTR
        End Get
        Set(ByVal value As String)
            str_clienteSTR = value
        End Set
    End Property
    Property sistema() As String
        Get
            sistema = str_sistema
        End Get
        Set(ByVal value As String)
            str_sistema = value
        End Set
    End Property
    Property menu1() As String
        Get
            menu1 = str_menu1
        End Get
        Set(ByVal value As String)
            str_menu1 = value
        End Set
    End Property
    Property menu2() As String
        Get
            menu2 = str_menu2
        End Get
        Set(ByVal value As String)
            str_menu2 = value
        End Set
    End Property
    Property referencia() As String
        Get
            referencia = str_referencia
        End Get
        Set(ByVal value As String)
            str_referencia = value
        End Set
    End Property
    Property texto() As String
        Get
            texto = str_texto
        End Get
        Set(ByVal value As String)
            str_texto = value
        End Set
    End Property
    Property estado() As enu_estado
        Get
            estado = int_estado
        End Get
        Set(ByVal value As enu_estado)
            int_estado = value
        End Set
    End Property
    Property estadofecha() As DateTime
        Get
            estadofecha = dte_estadofecha
        End Get
        Set(ByVal value As DateTime)
            dte_estadofecha = value
        End Set
    End Property
    Property finalizado() As Boolean
        Get
            finalizado = bit_finalizado
        End Get
        Set(ByVal value As Boolean)
            bit_finalizado = value
        End Set
    End Property
    Property importancia() As enu_importancia
        Get
            importancia = int_importancia
        End Get
        Set(ByVal value As enu_importancia)
            int_importancia = value
        End Set
    End Property
    Property orden() As Integer
        Get
            orden = int_orden
        End Get
        Set(ByVal value As Integer)
            int_orden = value
        End Set
    End Property
    Property adjunto() As Byte()
        Get
            adjunto = str_adjunto
        End Get
        Set(ByVal value As Byte())
            str_adjunto = value
        End Set
    End Property
    Property PRGhoras() As Integer
        Get
            PRGhoras = int_PRGhoras
        End Get
        Set(ByVal value As Integer)
            int_PRGhoras = value
        End Set
    End Property
    Property PRGvalorhora() As Double
        Get
            PRGvalorhora = dbl_PRGvalorhora
        End Get
        Set(ByVal value As Double)
            dbl_PRGvalorhora = value
        End Set
    End Property
    Property PRGimporte() As Double
        Get
            PRGimporte = dbl_PRGimporte
        End Get
        Set(ByVal value As Double)
            dbl_PRGimporte = value
        End Set
    End Property
    Property pagado() As Boolean
        Get
            pagado = bit_pagado
        End Get
        Set(ByVal value As Boolean)
            bit_pagado = value
        End Set
    End Property
    Property pagadofecha() As DateTime
        Get
            pagadofecha = dte_pagadofecha
        End Get
        Set(ByVal value As DateTime)
            dte_pagadofecha = value
        End Set
    End Property
    Property adjuntoNombre As String
        Get
            adjuntoNombre = str_adjuntoNombre
        End Get
        Set(ByVal value As String)
            str_adjuntoNombre = value
        End Set
    End Property
    Property finalizadofecha As DateTime
        Get
            finalizadofecha = dte_finalizadofecha
        End Get
        Set(ByVal value As DateTime)
            dte_finalizadofecha = value
        End Set
    End Property
    Property vencimiento As DateTime
        Get
            vencimiento = dte_vencimiento
        End Get
        Set(ByVal value As DateTime)
            dte_vencimiento = value
        End Set
    End Property
    Property vencimientoRe As DateTime
        Get
            vencimientoRe = dte_vencimientoRe
        End Get
        Set(ByVal value As DateTime)
            dte_vencimientoRe = value
        End Set
    End Property
    Property Items() As Collections.Generic.List(Of cls_seguimiento_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_seguimiento_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_seguimiento_)
        While obj_Reader.Read()
            Dim Elemento As New cls_seguimiento_
            Elemento.int_idseguimiento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idseguimiento")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha"))) = False Then
                Elemento.dte_fecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("hora"))) = False Then
                Elemento.dte_hora = (obj_Reader.GetValue(obj_Reader.GetOrdinal("hora")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuario"))) = False Then
                Elemento.int_idusuario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuario")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("usuarioSTR"))) = False Then
                Elemento.str_usuarioSTR = (obj_Reader.GetValue(obj_Reader.GetOrdinal("usuarioSTR")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idcliente"))) = False Then
                Elemento.int_idcliente = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idcliente")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("clienteSTR"))) = False Then
                Elemento.str_clienteSTR = (obj_Reader.GetValue(obj_Reader.GetOrdinal("clienteSTR")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("sistema"))) = False Then
                Elemento.str_sistema = (obj_Reader.GetValue(obj_Reader.GetOrdinal("sistema")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("menu1"))) = False Then
                Elemento.str_menu1 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("menu1")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("menu2"))) = False Then
                Elemento.str_menu2 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("menu2")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("referencia"))) = False Then
                Elemento.str_referencia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("referencia")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("texto"))) = False Then
                Elemento.str_texto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("texto")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("estado"))) = False Then
                Elemento.int_estado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("estado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("estadofecha"))) = False Then
                Elemento.dte_estadofecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("estadofecha")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("finalizado"))) = False Then
                Elemento.bit_finalizado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("finalizado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("importancia"))) = False Then
                Elemento.int_importancia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("importancia")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("orden"))) = False Then
                Elemento.int_orden = (obj_Reader.GetValue(obj_Reader.GetOrdinal("orden")))
            End If
            Try
                If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("adjunto"))) = False Then
                    Elemento.str_adjunto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("adjunto")))
                End If
            Catch ex As Exception
            End Try
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGhoras"))) = False Then
                Elemento.int_PRGhoras = (obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGhoras")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGvalorhora"))) = False Then
                Elemento.dbl_PRGvalorhora = (obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGvalorhora")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGimporte"))) = False Then
                Elemento.dbl_PRGimporte = (obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGimporte")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pagado"))) = False Then
                Elemento.bit_pagado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pagado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pagadofecha"))) = False Then
                Elemento.dte_pagadofecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pagadofecha")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("adjuntoNombre"))) = False Then
                Elemento.str_adjuntoNombre = (obj_Reader.GetValue(obj_Reader.GetOrdinal("adjuntoNombre")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("finalizadofecha"))) = False Then
                Elemento.dte_finalizadofecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("finalizadofecha")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimiento"))) = False Then
                Elemento.dte_vencimiento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimiento")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimientoRe"))) = False Then
                Elemento.dte_vencimientoRe = (obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimientoRe")))
            End If
            col_Items.Add(Elemento)
        End While
    End Sub
    Private Sub CargarVariables()
        CargarVariables(exeReader)
    End Sub
    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idseguimiento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idseguimiento")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha"))) = False Then
            dte_fecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecha")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("hora"))) = False Then
            dte_hora = (obj_Reader.GetValue(obj_Reader.GetOrdinal("hora")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuario"))) = False Then
            int_idusuario = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuario")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("usuarioSTR"))) = False Then
            str_usuarioSTR = (obj_Reader.GetValue(obj_Reader.GetOrdinal("usuarioSTR")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idcliente"))) = False Then
            int_idcliente = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idcliente")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("clienteSTR"))) = False Then
            str_clienteSTR = (obj_Reader.GetValue(obj_Reader.GetOrdinal("clienteSTR")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("sistema"))) = False Then
            str_sistema = (obj_Reader.GetValue(obj_Reader.GetOrdinal("sistema")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("menu1"))) = False Then
            str_menu1 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("menu1")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("menu2"))) = False Then
            str_menu2 = (obj_Reader.GetValue(obj_Reader.GetOrdinal("menu2")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("referencia"))) = False Then
            str_referencia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("referencia")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("texto"))) = False Then
            str_texto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("texto")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("estado"))) = False Then
            int_estado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("estado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("estadofecha"))) = False Then
            dte_estadofecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("estadofecha")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("finalizado"))) = False Then
            bit_finalizado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("finalizado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("importancia"))) = False Then
            int_importancia = (obj_Reader.GetValue(obj_Reader.GetOrdinal("importancia")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("orden"))) = False Then
            int_orden = (obj_Reader.GetValue(obj_Reader.GetOrdinal("orden")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("adjunto"))) = False Then
            str_adjunto = (obj_Reader.GetValue(obj_Reader.GetOrdinal("adjunto")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGhoras"))) = False Then
            int_PRGhoras = (obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGhoras")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGvalorhora"))) = False Then
            dbl_PRGvalorhora = (obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGvalorhora")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGimporte"))) = False Then
            dbl_PRGimporte = (obj_Reader.GetValue(obj_Reader.GetOrdinal("PRGimporte")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pagado"))) = False Then
            bit_pagado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pagado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("pagadofecha"))) = False Then
            dte_pagadofecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("pagadofecha")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("adjuntoNombre"))) = False Then
            str_adjuntoNombre = (obj_Reader.GetValue(obj_Reader.GetOrdinal("adjuntoNombre")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("finalizadofecha"))) = False Then
            dte_finalizadofecha = (obj_Reader.GetValue(obj_Reader.GetOrdinal("finalizadofecha")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimiento"))) = False Then
            dte_vencimiento = (obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimiento")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimientoRe"))) = False Then
            dte_vencimientoRe = (obj_Reader.GetValue(obj_Reader.GetOrdinal("vencimientoRe")))
        End If
    End Sub

    Public Sub Nuevo(Optional ByVal ObtenerID As Boolean = False)
        Dim obj_Conexion As cls_Conexion
        If str_seguimientoConexion = "" Then
            obj_Conexion = New cls_Conexion
        Else
            obj_Conexion = New cls_Conexion(str_seguimientoConexion, True)
        End If
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "seguimiento__Nuevo"
                .Parameters.Add("@fecha", SqlDbType.DateTime).Value = dte_fecha
                .Parameters.Add("@hora", SqlDbType.DateTime).Value = dte_hora
                .Parameters.Add("@idusuario", SqlDbType.Int).Value = int_idusuario
                .Parameters.Add("@usuarioSTR", SqlDbType.NVarChar).Value = str_usuarioSTR
                .Parameters.Add("@idcliente", SqlDbType.Int).Value = int_idcliente
                .Parameters.Add("@clienteSTR", SqlDbType.NVarChar).Value = str_clienteSTR
                .Parameters.Add("@sistema", SqlDbType.NVarChar).Value = str_sistema
                .Parameters.Add("@menu1", SqlDbType.NVarChar).Value = str_menu1
                .Parameters.Add("@menu2", SqlDbType.NVarChar).Value = str_menu2
                .Parameters.Add("@referencia", SqlDbType.NVarChar).Value = str_referencia
                .Parameters.Add("@texto", SqlDbType.NVarChar).Value = str_texto
                .Parameters.Add("@estado", SqlDbType.Int).Value = int_estado
                .Parameters.Add("@estadofecha", SqlDbType.DateTime).Value = dte_estadofecha
                .Parameters.Add("@finalizado", SqlDbType.Bit).Value = bit_finalizado
                .Parameters.Add("@importancia", SqlDbType.Int).Value = int_importancia
                .Parameters.Add("@orden", SqlDbType.Int).Value = int_orden
                .Parameters.Add("@adjunto", SqlDbType.Image).Value = IIf(IsNothing((str_adjunto)), DBNull.Value, str_adjunto)
                .Parameters.Add("@PRGhoras", SqlDbType.Int).Value = int_PRGhoras
                .Parameters.Add("@PRGvalorhora", SqlDbType.Decimal).Value = dbl_PRGvalorhora
                .Parameters.Add("@PRGimporte", SqlDbType.Decimal).Value = dbl_PRGimporte
                .Parameters.Add("@pagado", SqlDbType.Bit).Value = bit_pagado
                .Parameters.Add("@pagadofecha", SqlDbType.DateTime).Value = dte_pagadofecha
                .Parameters.Add("@adjuntoNombre", SqlDbType.NVarChar).Value = str_adjuntoNombre
                .Parameters.Add("@finalizadofecha", SqlDbType.DateTime).Value = dte_finalizadofecha
                .Parameters.Add("@vencimiento", SqlDbType.DateTime).Value = dte_vencimiento
                .Parameters.Add("@vencimientoRe", SqlDbType.DateTime).Value = dte_vencimientoRe

                Dim Inicio As System.Threading.Thread
                Inicio = New Threading.Thread(AddressOf ExecuteCommand)
                Dim cargar As New xtf_guardarProgress
                exeCommand = obj_Conexion.obj_SqlCommand
                cargar.CambiarEstado("Enviando adjuntos...")
                cargar.Show()
                Inicio.Start()
                While Inicio.IsAlive
                    Application.DoEvents()
                End While
                cargar.Close()

                '.ExecuteNonQuery()
            End With
            If ObtenerID Then
                CargarUltimo()
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Crear el registro de seguimiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Modificar()
        Dim obj_Conexion As cls_Conexion
        If str_seguimientoConexion = "" Then
            obj_Conexion = New cls_Conexion
        Else
            obj_Conexion = New cls_Conexion(str_seguimientoConexion, True)
        End If
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "seguimiento__Modificar"
                .Parameters.Add("@idseguimiento", SqlDbType.Int).Value = int_idseguimiento
                .Parameters.Add("@fecha", SqlDbType.DateTime).Value = dte_fecha
                .Parameters.Add("@hora", SqlDbType.DateTime).Value = dte_hora
                .Parameters.Add("@idusuario", SqlDbType.Int).Value = int_idusuario
                .Parameters.Add("@usuarioSTR", SqlDbType.NVarChar).Value = str_usuarioSTR
                .Parameters.Add("@idcliente", SqlDbType.Int).Value = int_idcliente
                .Parameters.Add("@clienteSTR", SqlDbType.NVarChar).Value = str_clienteSTR
                .Parameters.Add("@sistema", SqlDbType.NVarChar).Value = str_sistema
                .Parameters.Add("@menu1", SqlDbType.NVarChar).Value = str_menu1
                .Parameters.Add("@menu2", SqlDbType.NVarChar).Value = str_menu2
                .Parameters.Add("@referencia", SqlDbType.NVarChar).Value = str_referencia
                .Parameters.Add("@texto", SqlDbType.NVarChar).Value = str_texto
                .Parameters.Add("@estado", SqlDbType.Int).Value = int_estado
                .Parameters.Add("@estadofecha", SqlDbType.DateTime).Value = dte_estadofecha
                .Parameters.Add("@finalizado", SqlDbType.Bit).Value = bit_finalizado
                .Parameters.Add("@importancia", SqlDbType.Int).Value = int_importancia
                .Parameters.Add("@orden", SqlDbType.Int).Value = int_orden
                .Parameters.Add("@adjunto", SqlDbType.Image).Value = IIf(IsNothing((str_adjunto)), DBNull.Value, str_adjunto)
                .Parameters.Add("@PRGhoras", SqlDbType.Int).Value = int_PRGhoras
                .Parameters.Add("@PRGvalorhora", SqlDbType.Decimal).Value = dbl_PRGvalorhora
                .Parameters.Add("@PRGimporte", SqlDbType.Decimal).Value = dbl_PRGimporte
                .Parameters.Add("@pagado", SqlDbType.Bit).Value = bit_pagado
                .Parameters.Add("@pagadofecha", SqlDbType.DateTime).Value = dte_pagadofecha
                .Parameters.Add("@adjuntoNombre", SqlDbType.NVarChar).Value = str_adjuntoNombre
                .Parameters.Add("@finalizadofecha", SqlDbType.DateTime).Value = dte_finalizadofecha
                .Parameters.Add("@vencimiento", SqlDbType.DateTime).Value = dte_vencimiento
                .Parameters.Add("@vencimientoRe", SqlDbType.DateTime).Value = dte_vencimientoRe

                Dim Inicio As System.Threading.Thread
                Inicio = New Threading.Thread(AddressOf ExecuteCommand)
                Dim cargar As New xtf_guardarProgress
                exeCommand = obj_Conexion.obj_SqlCommand
                cargar.CambiarEstado("Enviando adjuntos...")
                cargar.Show()
                Inicio.Start()
                While Inicio.IsAlive
                    Application.DoEvents()
                End While
                cargar.Close()

                '.ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Modificar el registro de seguimiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Dim exeCommand As SqlCommand
    Public Sub ExecuteCommand()
        exeCommand.ExecuteNonQuery()
    End Sub

    Dim exeReader As SqlDataReader
    Public Sub ExecuteReader()
        exeReader = exeCommand.ExecuteReader
    End Sub

    Public Sub Eliminar(ByVal idseguimiento As Integer)
        Dim obj_Conexion As cls_Conexion
        If str_seguimientoConexion = "" Then
            obj_Conexion = New cls_Conexion
        Else
            obj_Conexion = New cls_Conexion(str_seguimientoConexion, True)
        End If
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "seguimiento__Eliminar"
                .Parameters.Add("@idseguimiento", SqlDbType.Int).Value = idseguimiento
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Eliminar el registro de seguimiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idseguimiento As Integer) As Boolean
        Dim obj_Conexion As cls_Conexion
        If str_seguimientoConexion = "" Then
            obj_Conexion = New cls_Conexion
        Else
            obj_Conexion = New cls_Conexion(str_seguimientoConexion, True)
        End If
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "seguimiento__Buscar"
                .Parameters.Add("@idseguimiento", SqlDbType.Int).Value = idseguimiento
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader

            If obj_Reader.HasRows Then
                exeReader = obj_Reader
                Dim Inicio As System.Threading.Thread
                Inicio = New Threading.Thread(AddressOf CargarVariables)
                Dim cargar As New xtf_guardarProgress
                exeCommand = obj_Conexion.obj_SqlCommand
                cargar.CambiarEstado("Cargando adjuntos...")
                cargar.Show()
                Inicio.Start()
                While Inicio.IsAlive
                    Application.DoEvents()
                End While
                cargar.Close()

                'CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al Buscar el registro de seguimiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As cls_Conexion
        If str_seguimientoConexion = "" Then
            obj_Conexion = New cls_Conexion
        Else
            obj_Conexion = New cls_Conexion(str_seguimientoConexion, True)
        End If
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "seguimiento__CargarUltimo"
            End With

            Dim Inicio As System.Threading.Thread
            Inicio = New Threading.Thread(AddressOf ExecuteReader)
            Dim cargar As New xtf_guardarProgress
            exeCommand = obj_Conexion.obj_SqlCommand
            cargar.CambiarEstado("Cargando seguimientos...")
            cargar.Show()
            Inicio.Start()
            While Inicio.IsAlive
                Application.DoEvents()
            End While
            cargar.Close()
            obj_Reader = exeReader

            'obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al CargarUltimo registro de seguimiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos(Optional ByVal idregistroestado As Integer = 1) As Boolean
        Dim obj_Conexion As cls_Conexion
        If str_seguimientoConexion = "" Then
            obj_Conexion = New cls_Conexion
        Else
            obj_Conexion = New cls_Conexion(str_seguimientoConexion, True)
        End If
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "seguimiento__CargarTodos"
                '.Parameters.Add("@idregistroestado", SqlDbType.Int).Value = idregistroestado
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            MessageBox.Show("Error al CargarTodos los registros de seguimiento_." & Chr(13) & _
            "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
            "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
            "Descripción: " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_seguimiento_Clon As New cls_seguimiento_
        obj_seguimiento_Clon.int_idseguimiento = Me.int_idseguimiento
        obj_seguimiento_Clon.dte_fecha = Me.dte_fecha
        obj_seguimiento_Clon.dte_hora = Me.dte_hora
        obj_seguimiento_Clon.int_idusuario = Me.int_idusuario
        obj_seguimiento_Clon.str_usuarioSTR = Me.str_usuarioSTR
        obj_seguimiento_Clon.int_idcliente = Me.int_idcliente
        obj_seguimiento_Clon.str_clienteSTR = Me.str_clienteSTR
        obj_seguimiento_Clon.str_sistema = Me.str_sistema
        obj_seguimiento_Clon.str_menu1 = Me.str_menu1
        obj_seguimiento_Clon.str_menu2 = Me.str_menu2
        obj_seguimiento_Clon.str_referencia = Me.str_referencia
        obj_seguimiento_Clon.str_texto = Me.str_texto
        obj_seguimiento_Clon.int_estado = Me.int_estado
        obj_seguimiento_Clon.dte_estadofecha = Me.dte_estadofecha
        obj_seguimiento_Clon.bit_finalizado = Me.bit_finalizado
        obj_seguimiento_Clon.int_importancia = Me.int_importancia
        obj_seguimiento_Clon.int_orden = Me.int_orden
        obj_seguimiento_Clon.str_adjunto = Me.str_adjunto
        obj_seguimiento_Clon.int_PRGhoras = Me.int_PRGhoras
        obj_seguimiento_Clon.dbl_PRGvalorhora = Me.dbl_PRGvalorhora
        obj_seguimiento_Clon.dbl_PRGimporte = Me.dbl_PRGimporte
        obj_seguimiento_Clon.bit_pagado = Me.bit_pagado
        obj_seguimiento_Clon.dte_pagadofecha = Me.dte_pagadofecha
        obj_seguimiento_Clon.col_Items = Me.col_Items
        Return obj_seguimiento_Clon
    End Function

    Public Function imageToByteArray(ByVal imageIn As System.Drawing.Image) As Byte()
        If Not IsNothing(imageIn) Then
            Dim ms As New IO.MemoryStream()
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
            Return ms.ToArray()
        End If
        Return Nothing
    End Function

    Public Function byteArrayToImage(ByVal byteArrayIn As Byte()) As Image
        Dim ms As New IO.MemoryStream(byteArrayIn)
        Dim returnImage As Image = Image.FromStream(ms)
        Return returnImage
    End Function
End Class
